אני בניתי לאחרונה פריימוורק בשבילי כדי לבדוק את היכולות שלי בעבודה על פרוייקטים בינוניים.
אני עובד על שרת UBUNTU עם NGINX
עכשיו לפיירמוורק שלי יש נתיבי גלישה כמו /Master/Do כאשר אני ניכנס לURL הזה (127.0.0.1/Master/Do) זה זורק אותי לשגיאה 404. לפי מה שאני חושב זה פשוט מחפש תיקיה ולא הולך על פי הקונטרולר.
השתמשתי בCONFIG של NGINX בתקווה שזה ישנה את זה
http://pastebin.com/jbAnPzAm
אבל לא קרה כלום
20 תשובות
אולי תרשום משהו כזה בקובץ htaccess ?
תנסה ככה:
{
# Filter out arbitrary code execution
location ~ \..*/.*\.php$ {return 404;}
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
set $memcached_key "ubuntu:$request_uri";
memcached_pass 127.0.0.1:11211;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
break;
}
אלכס זה עדיין לא עוזר.
404 Not Found
nginx/1.1.19
ביטלתי גם את cgi.fix_pathinfo שהיה אצלי על 1
אולי הבעיה היא בפריימוורק שלי? יכול להיות שמציאת נתיבים בפריימוורק שלי לא נכונים?
זה הקוד שלי, תגידו מה דעתכם:
private $controller = null;
private $actionMethod = null;
private $baseUrl = null;
/*
* __construct function;
* Are there any files in the Main folder
*/
public function __construct() {
$files = glob(Config::read('controllers').'*.php');
if(!$files) throw new
tException("Router", "ERROR: can't find any controllers");
foreach($files as $file)
require_once $file;
}
/*
* __construct function;
* Getting data vars from the url
*/
public function pathRouter() {
$requestUrl = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$requestString = substr($requestUrl, strlen($this->baseUrl));
$urlParams = explode('/', $requestString);
$this->controller = ucfirst(array_shift($urlParams)) . 'Controller';
$this->actionMethod = strtolower(array_shift($urlParams)) . 'Action';
return array("controller"=>$this->controller, "action"=>$this->actionMethod);
}
}
לא משנה מה הקוד שלך.
משנה האם כל הבקשות מגיעות ל index.php או לא.
מה כתוב באותו index.php פחות מעניין. מצידי שיהיה שם echo 'hi';
הקונפיג שצירפתי אמור להביא אותך ל index.php בכל בקשה, אבל אם זה לא קורה
צריך לראות בלוגים מה nginx חושב שכן קורה.
תעיף מבט ב error.log ו access.log של nginx ותצרף לפה את הכמה שורות האחרונות שנכתבות לשם אחרי שאתה גולש לנטיב כלשהו.
לא צריך את כל הerror-log.
צריך שתמחק ממנו הכל, תנסה לגלוש ותצרף לפה רק את מה שקורה אחרי שאתה מנסה לגלוש.
מה השרת עשה שבוע שעבר לא באמת מעניין.
טוב זה מה שמופיע לי בACCESS LOG:
192.168.0.104 - - [10/Dec/2012:21:43:41 +0200] "GET /favicon.ico HTTP/1.1" 404 200 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"
192.168.0.104 - - [10/Dec/2012:21:43:57 +0200] "-" 400 0 "-" "-"
עכשיו לגבי הלוג של השגיאות - במידה ואני ניכנס לתיקיה הראשית של הפריימוורק ללא נתיבים לקונטרולר הוא כותב לי את זה:
ופולט לי בדפדפן את זה -
אבל כשאני ניכנס לנתיב של הקונטרולר /Home אין שום שגיאה למרות שאני מקבל 404.
אז תיכנס לנטיב שנותן לך את ה-404.
אם הבקשה הגיע אל הסקריפט שלך והוא לא עובד - אתה מתקן את הסקריפט.
אם הבקשה לא הגיע לסקריפט שלך למרות שהיא הייתה אמורה - אנחנו ביחד מתקנים את קונפיג של השרת.
אם אתה נמצא במקרה הראשון, השאלה סגורה מבחינתי.
אם אתה נמצא במקרה השני, אני צריך את הלוגים של מה שקורה. אחת אנחנו לא יודעים מה באמת השרת חושב שהוא עושה.
הבקשה לא מגיע לסקריפט. ניסיתי כמה פעמים
אפשר לנסות להוסיף את התנאי הבא:
if (!-e $request_filename)
{
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}
2012/12/11 15:21:41 [emerg] 3128#0: open() "/var/run/nginx.pid" failed (13: Permission denied)
יש מצב שזה קשור לפאנל שפתחתי? ISPCONFIG אני מקבל בלוגים בקשות שיוצאות ממערכת של ISPCONFIG.. אין לי קשר אליהן.
ניסיתי לעשות ריסטרט לNGINX וקיבלתי מה ששלחתי למעלה ^
יש מצב שזה קשור. אני לא יודע אם הפאנל משנה הרשאות על דברים או לא,
אבל אם אתה מתחבר דרך הקונסול, אתה תמיד יכול לעשות ריסטרט לשרת בתור root
או אם אתה בקונסול כבר בתור root, אז בלי ה sudo
מתברר שגם בAPACHE2 זה לא ממש עובד..
כתבתי קובץ HTACCESS עם הקודים האלה:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
וזה גם כן לא ניגש לשום קונטרולר דרך הINDEX - מוביל אותי לדף 404 בדיוק כמו בNGINX
אגב, הידרתי היום את הקודים של PHP5.5 הגירסה החדשה (לא מומלצת לשימוש לפי הארגון בגלל שהיא אלפא), איך אני יכול לחבר אותה עם אפצ'י? השתמשתי במודל מתאים העניין שהמודל הזה ישן ולא מצאתי באינטרנט שום דבר שקשור להידור מודל חדש בין אפצ'י לPHP
בוא נלך שלב שלב ונסיים קודם עם מה יש בלוגים של nginx
כאשר אתה לא מצליח להגיע לסקריפט שלך.
אחרי שעשיתי פירמוט למחשב שלי והתקנתי הכל מחדש (UBUNTU LTS 12.04) השגיאה שונתה - עכשיו זה 500. יש לי הרגשה שזה קשור לסקריפט שלי?
2012/12/13 16:01:46 [error] 3231#0: *14 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 192.168.0.104, server: nginx, request: "GET /index.php/Master HTTP/1.1", host: "192.168.0.100:8080"
טוב עכשיו סידרתי בקונפיגורציה שזה יריץ גם קבצי PHP, זה הריץ רק HTML.
זה מוביל אותי עכשיו ישירות לINDEX.PHP בכל פעם כשאני ניגש לנתיב כלשהו.. אני חושב שיש לנו התקדמות.
אני מקבל ארור של PHP שאומר שהוא לא מזהה את האובייקט של הקונטרולר כי הוא לא קולט אותו משום מה מURL:
מעולה. זה הייתה הבעיה: איך לגרום לכל הבקשות תמיד להגיע ל index.php.
הנושא הזה מבחינתי סגור.
עכשיו אפשר לפתוח שאלה חדשה שבה תשאל מה שאתה רוצה על הקוד שלך :)
תודה אלכס! אפתח תכף.